#include "button_photo.h"
#include "ai_image.h"  // 新增头文件
#include "esp_log.h"
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "driver/gpio.h"

static const char *TAG = "BUTTON";

// 按键状态变量
static volatile bool button_pressed = false;

// AI图像分析结果处理函数
static void ai_image_response_handler(const char* response) {
    ESP_LOGI(TAG, "AI图像分析结果: %s", response);
    // 这里可以添加将结果显示到聊天框的逻辑
    // 目前先打印到日志，后续可以扩展为发送到前端
}

// 按键中断处理函数
static void IRAM_ATTR button_isr_handler(void* arg) {
    button_pressed = true;
}

// 按键任务函数
static void button_task(void* arg) {
    while (1) {
        if (button_pressed) {
            button_pressed = false;
            
            ESP_LOGI(TAG, "按键被按下，开始拍照并发送到AI分析...");
            
            // 从摄像头获取图像
            camera_fb_t *fb = capture_image();
            if (fb) {
                ESP_LOGI(TAG, "拍照成功！图像大小: %d字节", fb->len);
                
                // 发送图像到AI进行分析
                send_image_to_ai(fb);
                
                // 释放帧缓冲区
                return_fb_buffer(fb);
            } else {
                ESP_LOGE(TAG, "拍照失败！");
            }
        }
        
        // 短暂延迟
        vTaskDelay(10 / portTICK_PERIOD_MS);
    }
}

// 初始化按键功能
void button_init(void) {
    ESP_LOGI(TAG, "初始化按键功能，GPIO: %d", BUTTON_GPIO);
    
    // 配置GPIO为输入模式，启用上拉电阻
    gpio_config_t io_conf = {
        .pin_bit_mask = (1ULL << BUTTON_GPIO),
        .mode = GPIO_MODE_INPUT,
        .pull_up_en = GPIO_PULLUP_ENABLE,
        .pull_down_en = GPIO_PULLDOWN_DISABLE,
        .intr_type = GPIO_INTR_NEGEDGE // 下降沿触发（按下时从高变低）
    };
    gpio_config(&io_conf);
    
    // 安装GPIO中断服务
    gpio_install_isr_service(0);
    
    // 添加中断处理函数
    gpio_isr_handler_add(BUTTON_GPIO, button_isr_handler, NULL);
    
    // 设置AI图像分析回调函数
    set_ai_image_callback(ai_image_response_handler);
    
    // 创建按键处理任务
    xTaskCreate(button_task, "button_task", 4096, NULL, 10, NULL);
    
    ESP_LOGI(TAG, "按键功能初始化完成");
}